package main

/**
1、new函数--可以做到哪些事
1.1）分配内存
1.2）设置零值
1.3）返回指针

2、make函数
2.1）内建函数make用来为slice，map，或者chan类型（注意：只能用在这三种类型上）分配内存和初始化一个对象。
2.2）make返回类型的本身而不是指针，而返回值依赖于具体传入的类型，因为三种类型就是引用类型，所以没有必要返回他们的指针了。
-----》上述三种类型是引用类型，所以必须要初始化（size和cap），但不是置为零值，这个和new是不一样的。

总结：
（1）new：为所有的类型分配内存，并初始化为零值，返回指针
（2）make：只能为slice,map,chan分配内存，并初始化，返回的是类型


*/
import "fmt"

// 定义一个结构体
type Student struct {
	name string
	age  int
}

func main() {

	// new 一个内建类型
	num := new(int)
	fmt.Println(*num)

	// new 一个自定义类型
	s := new(Student)
	s.name = "zhouhailin"
	fmt.Println("============================================")

	// make的用法
	// 切片
	a := make([]int, 2, 10)
	fmt.Println(a)
	// 字典
	b := make(map[string]int)
	fmt.Println(b)
	// 通道
	c := make(chan int, 10)
	fmt.Println(c)

}
